
#include"INFIRMIER.h"
#include<stdio.h>
#include<string.h>
//#include"gestion.h"
liste CreerListeVide()
{
	liste l;
	l=NULL;
	return l;
}
liste InsererTete(liste l,infirmier med)
{
	liste nc;
    nc=(liste)malloc(sizeof(struct cellule));
	nc->valeur=med;
	nc->suivant=l;
	l=nc;
	return(l);
}
liste SupprimerPosition(liste l,liste p)
{
	liste q,r;
	q=l;
	while((q->suivant!=NULL)&&(q!=p))
	{	r=q;
		q=q->suivant;
	}
	r->suivant=q->suivant;
	free(q);
	return l;
}
int ValideNom(char nom[25])
{
	int i=0;
	while(nom[i])
	{
		if(((nom[i]<'a')||(nom[i]>'z'))&&((nom[i]<'A')||(nom[i]>'Z')))
			return -1;
			i++;
			if (i>23) return -1;
	}
	return 1;

}
int ValideIdentfiant(char id[MaxIdentifiant])
{
	int i;
	 for(i=1;i<5;i++)
		if((id[i]>'9')||(id[i]<'0'))
			return -1;
	if ((strlen(id)!=5)||((id[0]!='p')&&(id[0]!='P')))
		return -1;
	return 1;
}
int ValideDate(int j,int m,int a)
{
    		if((j<32)&&(j>=1)&&(m>0)&&(m<13)&&(a>MiniAnne)&&(a<MaxAnne))
	return 1;
}
dat SaisieDate()
{
	infirmier x;
	printf("Donner la date de naissance\n");
	do
	{
	printf("Jour:(jj)\t");
	scanf("%d",&x.date.j);
	}while((x.date.j<=0)||(x.date.j>31));
	do
	{
	printf("Mois:(mm)\t");
	scanf("%d",&x.date.m);
	}while((x.date.m<=0)||(x.date.m>12));
	do
	{
	printf("Annee:(aaaa)\t");
	scanf("%d",&x.date.a);
	}while((x.date.a<=1930)||(x.date.a>1995));
	return x.date;
}
infirmier SaisieInfirmier()
{
	int i;
	infirmier x;
	printf("AJOUT INFIRMIER\n\n\n");
	printf("Saisir les informations suivantes sur l infirmier:\n");
	printf("\t\t\tATTENTION:NE FAITE PAS DES ESPACES DANS LA SAISIE\n");
	do
	{
	printf("Nom:\t");
	scanf("%s",x.nom);
	if(ValideNom(x.nom)==-1) 
		printf("\tNOM INVALIDE\a\n");
	}while(ValideNom(x.nom)==-1);
	do
	{
	printf("Prenom:\t");
	scanf("%s",x.prenom);
	if(ValideNom(x.prenom)==-1) 
		printf("\tPRENOM INVALIDE\a\n");
	}while(ValideNom(x.prenom)==-1);

	do
	{
	printf("Sexe (M:male/F:female):\t");	
	scanf("%s",&x.sexe);
	if ((x.sexe!='m')&&(x.sexe!='f')&&(x.sexe!='M')&&(x.sexe!='F'))
		printf("\tCHOIX INVALIDE\a\n");
	}while((x.sexe!='m')&&(x.sexe!='f')&&(x.sexe!='M')&&(x.sexe!='F'));
	do
	{
	x.date=SaisieDate();
	printf("\nDate valide\n");
	}while(ValideDate(x.date.j,x.date.m,x.date.a)==-1);
	printf("Identifiant:\t");
	do
	{
	scanf("%s",x.id);
	if(ValideIdentfiant(x.id)!=1)
		printf("\t\aIDENTIFIANT NON VALIDE\nVEUILLEZ ENTRER UN IDENTIFIANNT DE LA FORME P0000:\t");

	}while (ValideIdentfiant(x.id)!=1);
	
		
		return x;
}

liste InsererInfirmier(liste l,infirmier e)
{
	liste nc,pc;
	nc=(liste)malloc(sizeof(struct cellule));
	pc=l;
	nc->valeur=e;
	nc->suivant=l;
	l=nc;
    return(l);
}
void AfficherListe(liste l)
{
	liste pc;
	pc=l;
	if(pc!=NULL)
	{
	int i;
	printf("AFFICHAGE DE TOUS LES INFIRMIERS\n\n\n");
	printf("°°°°°°°°°°°°°°°°°°°°°°°°°°°\n");
	printf("%s\t",pc->valeur.nom);
	printf("%s\t(nom prenom)\n",pc->valeur.prenom);
	printf("%c\t(Sexe)\n",pc->valeur.sexe);
	printf("%d\\%d\\%d\t(date de naissance)\n",pc->valeur.date.j,pc->valeur.date.m,pc->valeur.date.a);
	printf("%s\t(l'identifiant)\n",pc->valeur.id);
	  
		printf("°°°°°°°°°°°°°°°°°°°°°°°°°°°\n");
		if(pc->suivant!=NULL)
		pc=pc->suivant;
	}
}

liste AfficherInfirmier(liste l)
{	liste p,pc;
	int i;
	char ide[6], nom[25];
	p=l;
	printf("Afficher Infirmier\n");
	do
	{
		printf("nom d infirmier a afficher:\t");
		scanf("%s",nom);
	if(ValideNom(nom)==-1) 
		printf("\tNOM INVALIDE\a\n");
	}while(ValideNom(nom)==-1);

				 printf("identifiant d infirmier a afficher:\t");
				 	do
						{
						scanf("%s",ide);
						if(ValideIdentfiant(ide)!=1)
						printf("\t\aIDENTIFIANT NON VALIDE\nVEUILLEZ ENTRER UN IDENTIFIANNT DE LA FORME P0000:\t");

						}while (ValideIdentfiant(ide)!=1);
	if(p==NULL)
	{
		printf("\ninfirmier introuve\n");
		return l;
	}
	while(p!=NULL)
		{
			if((strcmp(p->valeur.id,ide)==0)&&strcmp(p->valeur.nom,nom)==0)
				{pc=p;	
				printf("°°°°°°°°°°°°°°°°°°°°°°°°°°°\n");
				printf("%s\t",pc->valeur.nom);
				printf("%s\t(nom prenom)\n",pc->valeur.prenom);
				printf("%c\t(Sexe)\n",pc->valeur.sexe);
				printf("%d\\%d\\%d\t(date de naissance)\n",pc->valeur.date.j,pc->valeur.date.m,pc->valeur.date.a);
				printf("%s\t(l'identifiant)\n",pc->valeur.id);
		printf("°°°°°°°°°°°°°°°°°°°°°°°°°°°\n");
		return l;
	}
			p=p->suivant;
		}
	printf("\ninfirmier introuve\n");
	return l;

}
liste AgeInfirmier(liste l)
{
  liste p;
 char ide[6], nom[25];
 p=l;
 printf("\nAFFICHER AGE\n");
do
 {
 printf("nom d infirmier  a afficher leur age:\t");
  scanf("%s",nom);
 if(ValideNom(nom)==-1) 
  printf("\tNOM INVALIDE\a\n");
 }while(ValideNom(nom)==-1);
 printf("identifiant d infirmier a afficher leur age:\t");
 do
 {
  scanf("%s",ide);
  if(ValideIdentfiant(ide)!=1)
  printf("\t\aIDENTIFIANT NON VALIDE\nVEUILLEZ ENTRER UN IDENTIFIANNT DE LA FORME P0000:\t");
 }while (ValideIdentfiant(ide)!=1);
  while ((p!=NULL)&&((strcmp(p->valeur.id,ide)!=0)||strcmp(p->valeur.nom,nom)!=0))
{
   p=p->suivant;};
   if(p==NULL)
   {
    printf("\ninfirmier introuve\n");
    return l;
   }
  
 printf("l'age du cet infirmier est :%d ans \n\n",AnneCourante-p->valeur.date.a) ;
			   return l;
	  
}
liste SupprimerInfirmier(liste l)
{
liste p,pre;
	char ide[6], nom[25];
	p=l;
	printf("\nSUPPRIMER INFIRMIER\n");
		do
	{
	printf("nom d infirmier a supprimer:\t");
		scanf("%s",nom);
	if(ValideNom(nom)==-1) 
		printf("\tNOM INVALIDE\a\n");
	}while(ValideNom(nom)==-1);
	printf("identifiant :\t");
		do
			{
				scanf("%s",ide);
				if(ValideIdentfiant(ide)!=1)
				printf("\t\aIDENTIFIANT NON VALIDE\nVEUILLEZ ENTRER UN IDENTIFIANNT DE LA FORME P0000:\t");
			}while (ValideIdentfiant(ide)!=1);
		while ((p!=NULL)&&((strcmp(p->valeur.id,ide)!=0)||strcmp(p->valeur.nom,nom)!=0))
		{
			pre=p;
			p=p->suivant;
		};
			if(p==NULL)
			{
				printf("\ninfirmier introuve\n");
				return l;
			}
			if(p==l)
			{
				l=l->suivant;
				free(p);
				printf("\nFICHE SUPPRIME\n\n");
				return l;
			}
			pre->suivant=p->suivant;
			free(p);
			printf("\nFICHE SUPPRIME\n\n");
		return l;
}
liste TriNom(liste l)
{ 
	infirmier aux;
	
	
	liste p,q;
	p=l;
	 
	if (l==NULL)
	return l;

	while(p!=NULL)
	{	
			q=p->suivant;
			while(q!=NULL)
				{
					if(strcmp(p->valeur.nom,q->valeur.nom)>0)
					{
					 aux=q->valeur;
                     q->valeur=p->valeur;
                     p->valeur=aux;
					}
					q=q->suivant;
				}
	p=p->suivant;
	}
	return l;
}
liste TriIdentifiant(liste l)
{ 
	infirmier aux;
	
	
	liste p,q;
	p=l;
	 
	if (l==NULL)
	return l;

	while(p!=NULL)
	{	
			q=p->suivant;
			while(q!=NULL)
				{
					if(strcmp(p->valeur.id,q->valeur.id)>0)
					{
					 aux=q->valeur;
                     q->valeur=p->valeur;
                     p->valeur=aux;
					}
					q=q->suivant;
				}
	p=p->suivant;
	}
	return l;
}
liste MiseAjour(liste l,infirmier x)
{
 liste p;
 char ide[6], nom[25];
 p=l;
 printf("\nMISE A JOUR\n");
do
 {
 printf("nom d infirmier a faire la mise a jour:\t");
  scanf("%s",nom);
 if(ValideNom(nom)==-1) 
  printf("\tNOM INVALIDE\a\n");
 }while(ValideNom(nom)==-1);
 printf("identifiant a faire la mise a jour:\t");
 do
 {
  scanf("%s",ide);
  if(ValideIdentfiant(ide)!=1)
  printf("\t\aIDENTIFIANT NON VALIDE\nVEUILLEZ ENTRER UN IDENTIFIANNT DE LA FORME P0000:\t");
 }while (ValideIdentfiant(ide)!=1);
  while ((p!=NULL)&&((strcmp(p->valeur.id,ide)!=0)||strcmp(p->valeur.nom,nom)!=0))
{
   p=p->suivant;};
   if(p==NULL)
   {
    printf("\ninfirmier introuve\n");
    return l;
   }
p->valeur=SaisieInfirmier();

return l;
}
void EcrireFichier(liste l)
{
	liste pc;
	FILE *fichier;
	pc=l;
	int i;
	fichier=fopen("infirmier.txt","w");
	if(l==NULL)
	{
		fclose(fichier);
	}
while(pc!=NULL)
	{
		fprintf(fichier,"%s %s %c %d %d %d %s",pc->valeur.nom,pc->valeur.prenom,pc->valeur.sexe,pc->valeur.date.j,pc->valeur.date.m,pc->valeur.date.a,pc->valeur.id);
		/*fprintf(fichier,"%s\n",pc->valeur.prenom);
		fprintf(fichier,"%c\n",pc->valeur.sexe);
		fprintf(fichier,"%d\n",pc->valeur.date.j);
		fprintf(fichier,"%d\n",pc->valeur.date.m);
		fprintf(fichier,"%d\n",pc->valeur.date.a);
		fprintf(fichier,"%s\n",pc->valeur.id);*/
		pc=pc->suivant;
	}
	fclose(fichier);
}
liste LireFichier(liste l)
{
	liste pc;
	FILE *fichier;
	int i;
	fichier=fopen("infirmier.txt","r");
	if(!fichier)
	{
		printf("le fichier:'infirmier.txt' n'existe pas ajoute infirmier pour creer le fichier\n");
return(l);
	}
	while(!feof(fichier))
	{
		pc=(liste)malloc(sizeof(struct cellule));
		while(fscanf(fichier,"%s %s %c %d %d %d %s",pc->valeur.nom,pc->valeur.prenom,&(pc->valeur.sexe),&(pc->valeur.date.j),&(pc->valeur.date.m),&(pc->valeur.date.a),pc->valeur.id) !=EOF);
		
		pc->suivant=l;
		l=pc;
	}
	fclose(fichier);
	return(l);
}

